package com.mindskip.xzs.configuration.spring.security;
//用于定制化实现记住我功能的服务。
//1. **`RestTokenBasedRememberMeServices`类继承`TokenBasedRememberMeServices`**：
//   - 这个类通过继承`TokenBasedRememberMeServices`来实现记住我功能的服务。
//2. **`RestTokenBasedRememberMeServices`构造函数**：
//   - 通过调用父类的构造函数初始化记住我服务，传入生成和验证记住我令牌的密钥以及用于加载用户详细信息的用户服务。
//3. **`rememberMeRequested`方法重写**：
//   - 重写了`rememberMeRequested`方法，该方法确定是否应该记住当前用户。
//   - 根据请求参数中的`DEFAULT_PARAMETER`属性来判断是否应该记住当前用户。
//   - 这个方法的作用是基于请求属性来确定用户是否想要使用记住我功能。
//### 前端（Client-side）作用：
//1. **前端请求**：
//   - 当用户在前端发起请求时，可以根据需求在请求中添加特定的参数来指示是否要使用记住我功能。
//   - 前端需要在请求中设置一个标识，使后端能够根据该标识来确定是否应该记住当前用户。
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;

import javax.servlet.http.HttpServletRequest;

/**
 * RestTokenBasedRememberMeServices 类继承了 TokenBasedRememberMeServices，
 * 用于实现记住我功能的定制化服务。
 */
public class RestTokenBasedRememberMeServices extends TokenBasedRememberMeServices {

    /**
     * 构造函数，调用父类构造函数进行初始化
     * @param key 用于生成和验证记住我令牌的密钥
     * @param userDetailsService 用于加载用户详细信息的服务
     */
    public RestTokenBasedRememberMeServices(String key, UserDetailsService userDetailsService) {
        super(key, userDetailsService);
    }

    /**
     * 重写 rememberMeRequested 方法，确定是否应当记住当前用户
     * @param request 当前的 HTTP 请求
     * @param parameter 请求参数的名称
     * @return 是否应当记住当前用户
     */
    @Override
    protected boolean rememberMeRequested(HttpServletRequest request, String parameter) {
        // 从请求属性中获取是否记住我的标识
        return (boolean) request.getAttribute(DEFAULT_PARAMETER);
    }

}
